package com.hzw.saas.common.util.enums;

import java.util.Objects;

/**
 * 文件系统重名冲突解决模式
 *
 * @author zzl
 * @since 04/20/2021
 */
public enum ConflictModeEnum {

    /**
     * 允许同名文件
     */
    ALLOW(200, "ALLOW_CONFLICT"),
    /**
     * 重命名源文件，如后缀为 -copy({index})
     */
    RENAME_SRC(210, "RENAME_SOURCE"),
    /**
     * 删除源文件
     */
    DELETE_SRC(211, "DELETE_SOURCE"),
    /**
     * 删除源文件, 同时不留下目标文件的任何记录（如删除数据库记录与文件）
     */
    DELETE_SRC_PURE(212, "DELETE_SOURCE_PURE"),
    /**
     * 覆盖目标同名文件
     */
    COVER_TAR(221, "COVER_TARGET"),
    /**
     * 覆盖目标同名文件，同时不留下目标文件的任何记录（如删除数据库记录与文件）
     */
    COVER_TAR_PURE(222, "COVER_TARGET_PURE"),
    /**
     * 抛出异常
     */
    THROW_ERR(400, "THROW_CONFLICT"),
    ;

    private final Integer code;
    private final String text;

    ConflictModeEnum(Integer code, String text) {
        this.code = code;
        this.text = text;
    }

    public Integer code() {
        return code;
    }

    public String text() {
        return text;
    }

    public static String text(Integer code) {
        for (ConflictModeEnum value : ConflictModeEnum.values()) {
            if (Objects.equals(value.code, code))
                return value.text;
        }
        return null;
    }

    public static ConflictModeEnum instance(Integer code) {
        for (ConflictModeEnum value : ConflictModeEnum.values()) {
            if (Objects.equals(value.code, code))
                return value;
        }
        return null;
    }

    /**
     * 获取实例
     *
     * @param cover 是否覆盖
     * @return cover==true?cover:throw
     */
    public static ConflictModeEnum instance(boolean cover) {
        return cover ? ConflictModeEnum.COVER_TAR : ConflictModeEnum.THROW_ERR;
    }

}
